﻿using System.Collections.Generic;
using System.ComponentModel;
using System.Text.RegularExpressions;

namespace CalculoPreciosUnitarios.Logica.GestorObject.Unidad
{
    public class UnidadCS : INotifyPropertyChanged, IDataErrorInfo
    {
        public event PropertyChangedEventHandler PropertyChanged;

        private string _idUnidad;
        public string IdUnidad
        {
            get
            {
                return this._idUnidad;
            }
            set
            {
                if (this._idUnidad == value)
                {
                    return;
                }
                this._idUnidad = value;
                if (PropertyChanged != null) PropertyChanged(this, new PropertyChangedEventArgs("IdUnidad"));
            }
        }

        private string _descripcion;
        public string Descripcion
        {
            get
            {
                return this._descripcion;
            }
            set
            {
                if (this._descripcion == value)
                {
                    return;
                }
                this._descripcion = value;
                if (PropertyChanged != null) PropertyChanged(this, new PropertyChangedEventArgs("Descripcion"));
            }
        }

        public UnidadCS()
        {
            _idUnidad = "";
            _descripcion = "";
        }

        public string Error
        {
            get
            {
                return null;
            }
        }

        public string this[string propertyName]
        {
            get
            {
                return IsValid(propertyName);
            }
        }

        private string IsValid(string propertyName)
        {
            switch (propertyName)
            {
                case "IdUnidad":
                    if (string.IsNullOrWhiteSpace(IdUnidad))
                        return "El campo Codigo es requerido - ej: 0003";
                    else
                    {
                        Regex regEx;
                        regEx = new Regex(@"^[0-9]{1,4}$");
                        if (!regEx.IsMatch(IdUnidad))
                            return "El campo Codigo no " +
                                   "tiene un formato correcto \n ej:0003";
                    }
                    break;

                case "Descripcion":
                    if (string.IsNullOrWhiteSpace(Descripcion))
                        return "El campo Descripcion del artículo es requerido";
                    break;
            }
            return null;
        }

        public bool IsValid()
        {
            return !string.IsNullOrEmpty(IsValid("IdUnidad"))
                && !string.IsNullOrEmpty(IsValid("Descripcion"));
        }

    }

    public class MyOrderingUnidad : IComparer<UnidadCS>
    {
        public int Compare(UnidadCS x, UnidadCS y)
        {
            int compareNro = x.IdUnidad.CompareTo(y.IdUnidad);

            return compareNro;
        }
    }
}
